package com.wyw.mybatis.plus.learning.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.wyw.mybatis.plus.learning.base.BaseInfoProperties;
import com.wyw.mybatis.plus.learning.base.PagedGridResult;
import com.wyw.mybatis.plus.learning.mapper.DataDictionaryMapper;
import com.wyw.mybatis.plus.learning.pojo.DataDictionary;
import com.wyw.mybatis.plus.learning.service.DataDictionaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Title
 * @Description
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/5/30 11:02
 * Update History:
 * Author        Time            Content
 */
@Service
public class DataDictionaryServiceImpl extends BaseInfoProperties implements DataDictionaryService {

    @Autowired
    private DataDictionaryMapper dataDictionaryMapper;

    /**
     * PageHelper主要通过 Mybatis 的拦截器实现，在多个不同的拦截器中完成分页功能的具体实现。
     * Mybatis 内部有一个 Plugin 功能，允许我们在执行 SQL 语句前后对其进行拦截和修改。PageHelper 利用该特性编写了一个拦截器 PageInterceptor，将分页逻辑注入到拦截器中，在SQL执行前对待查询的参数进行拦截，根据参数生成相应的SQL语句，包含 LIMIT、OFFSET 等关键字。
     * 具体而言，PageHelper为实现分页功能，在Mybatis的拦截器链中添加一个拦截器PageInterceptor，当SqlSessionFactory创建时，PageInterceptor会被初始化并注册到InterceptorChain拦截器链中。当用户使用Mybatis提供的selectXXX()方法执行查询操作时，SqlSession的执行过程会先被InterceptorChain拦截，将Sql语句拼接‘limit’关键字来实现分页，并将生成的总记录数统计出来。分页信息就保存在Page对象中，最后返回给调用程序。
     * PageHelper同时支持多种数据库方言（如 MySQL、Oracle、SQL Server 等），可以自动识别并按照相应的语法规范生成标准的分页语句，这对开发人员很方便和免除了根据不同数据库读写语法的适配工作
     */
    @Override
    public PagedGridResult getList(Boolean enable, Integer page, Integer limit) {

        PageHelper.startPage(page, limit);

        List<DataDictionary> hrList = dataDictionaryMapper.selectList(
                new QueryWrapper<DataDictionary>()
                        .eq("enable", enable)
        );

        return setterPagedGrid(hrList, page);
    }

}
